Первым делом исправим допущенную неточность. В конце предыдущего шага когда зашла речь о том, что понадобится веб-сервер я сказал что лучше если это будет Apache. Оказалось что это только для меня лучше (ибо об установке и настройке рассказывать не надо), а на самом деле это не совсем так. Слово эксперту:
"Apache не создан под Java. Могу предложить бесплатно распространяемый, самый быстрый (!!!), несложный (а в прошлом самый простой), дешевый при коммерческом использовании (всего $500) Web-сервер Resin... Apache хороший сервер, но не для нас, джавистов. Мир Java многогранен, сложен, гармоничен. Открою секрет: основное преимущество Java не в апплетах, не в графических приложениях. Платформа Java - королева Internet. В Java-платформе есть спецификация специальной технологии для Web-сервисов: JSP и Servlet. Это простая по сути, но очень мощная, гибкая, чрезвычайно удобная архитектура. Так вот, коль есть спецификация, значит есть и серверы, ей удовлетворяющие. А раз есть серверы, значит и надо их использовать. Resin - тот сервер (он далеко не единственный). Apache, каким бы хорошим он ни был, - не тот сервер."
Danis Tazeyev
Ну что ж, если кто уже (по моей вине) установил Apache то прошу меня простить, хотя думаю, что знания полученные при его настройке никому не помешают. Как завести Resin и чем его кормить мы рассмотрим как только нам понадобится веб-сервер. Теперь вернемся к теме шага.
AnyObject Ob; Ob=new AnyObject();В первой строке происходит простое объявление типа. Во второй за дело берется оператор new, он выделает нашим данным память и вызывает конструктор объекта для проведения начальной инициализации. Это можно сделать и одной строкой:
AnyObject Ob=new AnyObject();в принципе от этого ничего не изменится. Кроме того, новый объект можно не создавать присвоив новой переменной значение существующего объекта:
AnyObject Ob1=new AnyObject(); AnyObject Ob2=Ob1;Кем в этом случае есть Ob2 для Ob1? Нет не копией, как можно было подумать, - собственно им он и есть со всеми вытекающими, то есть изменив поведение(свойство) Ob2, вы измените Ob1 и наоборот. Эквивалентный код на C++:
AnyObject& Ob2=Ob1;Теперь рассмотрим AWT-компоненты и их назначение:
import java.awt.*; import java.applet.*; public class Applet1 extends Applet { //Действие 1 Button But1, But2; Checkbox Ch1, Ch2, Ch3; CheckboxGroup ChGroup; Choice Cho; List Li; Label Lab; TextField TeF; TextArea TeAr; public void init() { //Действие 2 But1=new Button("Press me"); //Действие 3 Ch1=new Checkbox("Undependent"); ChGroup=new CheckboxGroup(); Ch2=new Checkbox("Dependent1", ChGroup, false); Ch3=new Checkbox("Dependent2", ChGroup, true); //Действие 4 Cho=new Choice(); Cho.addItem("Item 1"); Cho.addItem("Item 2"); Cho.addItem("Item 3"); //Действие 5 Li=new List (); Li.addItem("1 Item"); Li.addItem("2 Item"); //Действие 6 Lab=new Label(); Lab.setText("I am label"); //Действие 7 TeF=new TextField("Editable Text"); //Действие 8 TeAr=new TextArea(10, 15); TeAr.setText("Multiline and\r\neditable area"); //Действие 9 But2=But1; //Действие 10 add(But1); add(But2); add(Ch1); add(Ch2); add(Ch3); add(Cho); add(Li); add(Lab); add(TeF); add(TeAr); } }
А теперь самое интересное - "добавляем" с помощью метода add() все наши компоненты в апплет. Вот и вся суть этого шага. Апплет, как мы уже говорили, является потомком класса Container а значит и умещать в себе компоненты умеет, этим мы и воспользовались.
Кстати а где вторая кнопка? Мы ведь две размещали! Вы уже, конечно обо всем догадались. Объект-то на обе переменные (But1 и But2) единственный, а на одну панель (Panel - предок Applet) нельзя дважды один и тот же компонент ставить.
import javax.swing.*; import java.awt.*; public class Swing1 extends JApplet { //Опять же все объявляем JButton But1; JCheckBox Ch1; JRadioButton Ch2, Ch3; ButtonGroup BGroup; JComboBox Cho; JList Li; JLabel Lab; JTextField TeF; JTextArea TeAr; public void init() { /* Тут как и раньше, только название компонент немного другое конечно */ But1=new JButton("Press me"); Ch1=new JCheckBox("Undependent"); /* Для зависимых переключателей в Swing спец. класс имеется, хотя здесь можно и JCheckBox использовать с тем же успехом, но тогда квадратики вместо кружков будут - неприлично это для радиокнопок */ Ch2=new JRadioButton("Dependent1"); Ch3=new JRadioButton("Dependent2", true); /* Класс для групировки здесь немного по-другому устроен и работать он с разными кнопками может */ BGroup=new ButtonGroup(); BGroup.add(Ch2); BGroup.add(Ch3); /* Это аналог класса Choise, заполняется он немного иначе */ String[] ItemStrings = { "Item 1", "Item 2", "Item 3"}; JComboBox Cho = new JComboBox(ItemStrings); // Раскрытый список String[] ItemStrings2 = { "1 Item", "2 Item"}; Li=new JList (ItemStrings2); /* Строки ниже аналогично как и раньше лишь компоненты новые */ Lab=new JLabel(); Lab.setText("I am label"); TeF=new JTextField("Editable Text"); TeAr=new JTextArea(10, 15); TeAr.setText("Multiline and\r\neditable area"); //Об этой строке в следующем шаге getContentPane().setLayout(new FlowLayout()); //Здесь помещаем компоненты в апплет getContentPane().add(But1); getContentPane().add(Ch1); getContentPane().add(Ch2); getContentPane().add(Ch3); getContentPane().add(Cho); getContentPane().add(Li); getContentPane().add(Lab); getContentPane().add(TeF); getContentPane().add(TeAr); } }Кратко проанализируем: Первым делом мы подключили соответствующую библиотеку import javax.swing.*;. Класс нашего апплета наследуется теперь от JApplet. Это потомок класса Applet который может работать с Swing-компонентами. Название большинства компонент практически то же самое только с буквы "J". Я немного прокомментировал в коде их создание но работа с ними требует отдельного разговора. А вот помещаем мы компоненты в апплет немного иначе. В отличие от класса Applet который для размещения компонент использует возможности родительских классов, класс JApplet содержит в себе (как свое поле) класс JRootPane и пользуется им для размещения компонент. Принципиально JRootPane является панелью, среди его ближайших предков классы Container(AWT) и JComponent(Swing). Вот этот объект мы и получаем методом getContentPane(), а дальше вызываем у него знакомый нам метод add(). Компилируем (убедившись в поддержке компилятором Java 2), запускаем. Компоненты конечно покрасивей, а как увидим дальше, и пофункциональней.